//package com.souche.sts.study;
//
//import java.io.*;
//import java.net.ServerSocket;
//import java.net.Socket;
//
///**
// *
// * @description: 用线程池模拟一个http的server
// *
// * @author: heqiang
// *
// * @create: 2019-09-24 17:41
// **/
//public class SimpleHttpServer {
//    //线程池
//    static ThreadPool<HttpRequestHandler> threadPool = new DefaultThreadPool<HttpRequestHandler>(1);
//    //SimpleHttpServer根路径
//    static String basePath;
//    //
//    static ServerSocket serverSocket;
//    //端口
//    static int port = 8080;
//
//    public static void setPort(int port){
//        if(port > 0){
//            SimpleHttpServer.port = port;
//        }
//    }
//
//    public static void setBasePath(String basePath){
//        //判断路径是否存在并且正确并且是一个文件夹
//        if(basePath != null && new File(basePath).exists() && new File(basePath).isDirectory()){
//            SimpleHttpServer.basePath = basePath;
//        }
//    }
//
//
//    public static void start () throws Exception {
//        serverSocket = new ServerSocket(port);
//        Socket socket = null;
//        while ((socket = serverSocket.accept()) != null) {
//            threadPool.execute(new HttpRequestHandler(socket));
//        }
//        serverSocket.close();
//    }
//
//
//
//
//
//
//    static class HttpRequestHandler implements Runnable {
//        private Socket socket;
//
//        public HttpRequestHandler(Socket socket){
//            this.socket = socket;
//        }
//        @Override
//        public void run() {
//            String line = null;
//            BufferedReader br = null;
//            BufferedReader reader = null;
//            PrintWriter out = null;
//            InputStream in = null;
//            try {
//                reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//                String header = reader.readLine();
//                //绝对路径
//                String filePath = basePath + header.split(" ")[1];
//                out = new PrintWriter(socket.getOutputStream());
//                //
//                if(filePath.endsWith("jpg") || filePath.endsWith("ico")){
//                    in = new FileInputStream(filePath);
//                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
//                    int i = 0;
//                    while ((i = in.read()) != -1) {
//                        baos.write(i);
//                    }
//                    byte[] array = baos.toByteArray();
//                    out.println("HTTP/1.1 200 ok");
//                    out.println("Server:Molly");
//                    out.println("Content-type:image/jpeg");
//                    out.println("Content-Length: "+array.length);
//                    out.println("");
//                    socket.getOutputStream().write(array,0,array.length);
//                } else {
//                    br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
//                    out = new PrintWriter(socket.getOutputStream());
//                    out.println("HTTP/1.1 200 ok");
//                    out.println("Server:Molly");
//                    out.println("Content-type:text/html; charset=UTF-8");
//                    out.println("");
//                    while((line = br.readLine()) != null){
//                        out.println(line);
//                    }
//                }
//                out.flush();
//            } catch (IOException e) {
//                e.printStackTrace();
//            } finally {
//                close(br,in,reader,out,socket);
//            }
//        }
//    }
//
//    public static void close(Closeable... closeables){
//        if(closeables != null){
//            for(Closeable closeable:closeables){
//                try {
//                    closeable.close();
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//    }
//}
